﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <queue>
#include <list>
#include <vector>
#include <stack>
#include <string>
using namespace std;

//int main()
//{
//    priority_queue<long long> pq;//优先级队列
//    int i = 0;
//    int n = 0;
//    cin >> n;
//    for (i = 0; i < 3 * n; i++)//全部数据入队
//    {
//        long long a = 0;
//        cin >> a;
//        pq.push(a);
//    }
//
//    long long sum = 0;
//    for (i = 0; i < 2 * n; i++)//取队顶数据
//    {
//        if (i % 2 == 0)
//        {
//            pq.pop();
//        }
//        else//第2、4、6、8、10、……大的作为水平值
//        {
//            sum += pq.top();
//            pq.pop();
//        }
//    }
//
//    cout << sum;
//}
//int main()
//{
//	int array[] = { 1, 2, 3, 4, 0, 5, 6, 7, 8, 9 };
//	int n = sizeof(array) / sizeof(int);
//	list<int> mylist(array, array + n);
//	auto it = mylist.begin();
//
//	while (it != mylist.end())
//	{
//		if (*it != 0)
//		{
//			cout << *it << " ";
//		}
//		else
//		{
//			it = mylist.erase(it);
//		}
//		++it;
//	}
//	return 0;
//}
class Solution {
public:
    bool IsPopOrder(vector<int>& pushV, vector<int>& popV)
    {
        if (pushV.size() != popV.size())
        {
            return false;
        }
        stack<int> st;

        int pushi = 0;
        int popi = 0;

        while (pushi != pushV.size())
        {
            st.push(pushV[pushi]);

            while ((!st.empty()) && popi < popV.size() && st.top() == popV[popi])
            {
                st.pop();
                popi++;
            }
            pushi++;
        }
        return popi == popV.size();
        //write code here
    }

    int evalRPN(vector<string>& tokens)
    {
        stack<int> st;
        for (auto e : tokens)
        {
            if (e != "+" && e != "-" && e != "*" && e != "/")
            {
                st.push(stoi(e));
            }
            else
            {
                int right = st.top();
                st.pop();
                int left = st.top();
                st.pop();

                if (e == "+")
                {
                    st.push(right + left);
                }
                else if (e == "-")
                {
                    st.push(left - right);
                }
                else if (e == "*")
                {
                    st.push(right * left);
                }
                else
                {
                    st.push(left / right);
                }
            }
        }

        return st.top();
    }
};
//int main()
//{
//    //stack<char> S;
//    queue<char> S;
//    char x, y;
//    x = 'n'; y = 'g';
//    S.push(x);
//    S.push('i');
//    S.push(y);
//    S.pop();
//    S.push('r');
//    S.push('t'); 
//    S.push(x);
//    S.pop(); 
//    S.push('s');
//    while (!S.empty())
//    {
//        //x = S.top();
//        x = S.front();
//        S.pop();
//        cout << x;
//    };
//    cout << y;
//    return 0;
//}
int main()
{
    Solution S;
    vector<string> s = { "4", "13", "5", "/", "+" };

    cout << S.evalRPN(s) << endl;
    return 0;
}